<?php
header("Content-type:text/html;charset=utf-8");
//应用处理类
final class Application{
	static public function run()
	{
		self::set_define();
		//加载配置文件
		C(require CWF_PATH.'Config/Config.php');
		if (is_file(APP_PATH.APP_NAME.'/Conf/Config.php')) {
			C(require APP_PATH.APP_NAME.'/Conf/Config.php');
		}
		// p(C());
		self::runApp();
	}
	//处理url中的a应用，c控制器，m方法
	static private function runApp()
	{
		$control=CONTROL;$method=METHOD;
		if (!is_dir(APP_PATH.APP_NAME) ) {
			self::create_default_app();
			// echo "不是目录";
		}
		$classfile=APP_PATH.APP_NAME.'/Control/'.CONTROL.'.class.php';
		// $classfile='Index/Control/IndexControl.class.php';
		if (!is_file($classfile)) {
			echo $classfile.'类文件找不到'; exit;
		}
		require $classfile;
		//要new的class不能是常量
		if (!class_exists($control)) {
			echo $control.'模块不存在';exit;
		}
		$obj=new $control;
		//要访问的方法名不能是 常量
		if (!method_exists($obj,$method)) {
			echo $method.'方法不存在';exit;
		}
		$obj->$method();
	}
	//设置从url取到的a应用，c控制器，m方法为常量
	static private function set_define(){
		$app = APP_PATH.APP_NAME;
		$control=isset($_GET['c'])?$_GET['c']:'Index';
		$method=isset($_GET['m'])?$_GET['m']:'Index';
		defined('DEBUG') or define('DEBUG',false);
		define('REQUEST_METHOD',$_SERVER['REQUEST_METHOD']);
        define('IS_GET',        REQUEST_METHOD =='GET' ? true : false);
        define('IS_POST',       REQUEST_METHOD =='POST' ? true : false);
		define('APP', $app);
		define('CONTROL', $control.'Control');
		define('METHOD', $method);
		define('TPL_PATH',$app.'/Templates/'.$control.'/');
	}

	static private function create_default_app()
	{
		Dir::copy_dir(CWF_PATH.'tmp/',APP_PATH.APP_NAME);
	}

}